from sqlalchemy.orm import Session
from app.models.user import User, UserRole
from app.schemas.user import UserCreate
from app.core.security import get_password_hash, verify_password
from typing import List

# 通过用户名获取用户
def get_user_by_username(db: Session, username: str):
    # 查询用户名匹配的用户并返回第一个结果
    return db.query(User).filter(User.username == username).first()

# 通过邮箱获取用户
def get_user_by_email(db: Session, email: str):
    # 查询邮箱匹配的用户并返回第一个结果
    return db.query(User).filter(User.email == email).first()

# 通过ID获取用户
def get_user_by_id(db: Session, user_id: int):
    # 查询用户ID匹配的用户并返回第一个结果
    return db.query(User).filter(User.id == user_id).first()

# 获取所有管理员
def get_all_admins(db: Session) -> List[User]:
    # 查询所有管理员用户
    return db.query(User).filter(User.role == UserRole.ADMIN, User.is_active == True).all()

# 检查用户是否为管理员
def is_admin(user: User) -> bool:
    # 检查用户角色是否为管理员
    return user.role == UserRole.ADMIN

# 创建新用户
def create_user(db: Session, user: UserCreate):
    # 对密码进行哈希处理
    hashed_password = get_password_hash(user.password)
    # 创建用户对象
    db_user = User(
        username=user.username,
        email=user.email,
        hashed_password=hashed_password,
        role=user.role
    )
    # 添加到数据库
    db.add(db_user)
    # 提交事务
    db.commit()
    # 刷新对象以获取数据库生成的值
    db.refresh(db_user)
    # 返回创建的用户
    return db_user

# 验证用户凭据
def authenticate_user(db: Session, username: str, password: str):
    # 获取用户
    user = get_user_by_username(db, username)
    # 如果用户不存在，返回False
    if not user:
        return False
    # 验证密码，如果不匹配，返回False
    if not verify_password(password, user.hashed_password):
        return False
    # 验证成功，返回用户对象
    return user